# Test cxx descriptor functionality

Import('env')

base_env = env.Clone()
base_env.Replace(NANOPBFLAGS = '--cpp-descriptor')
base_env.NanopbProto('message')

for std in ["c++03", "c++11", "c++14", "c++17", "c++20"]:
    e = base_env.Clone()
    e.Append(CXXFLAGS = '-std={}'.format(std))

    # Make sure compiler supports this version of C++ before we actually run the
    # test.
    conf = Configure(e)
    compiler_valid = conf.CheckCXX()
    e = conf.Finish()
    if not compiler_valid:
        print("Skipping {} test - compiler doesn't support it".format(std))
        continue

    if std == 'c++03':
        e.Append(CPPDEFINES = {'PB_C99_STATIC_ASSERT': 1})

    o1 = e.Object('message_descriptor_{}'.format(std), 'message_descriptor.cc')
    o2 = e.Object('message.pb_{}'.format(std), 'message.pb.c')
    p = e.Program([o1, o2, "$COMMON/pb_common.o"])
    e.RunTest(p)
